什麼是 Provider 呢
就是Vagrant 建立VM 的提供者
以之前的 Vagrantfile 範例, Virtualbox 和 VMware workstation/fusion 就是provider
另外還有 AWS, Vsphere, Azure, Openstack 等等...
在第一篇提過,Vagrant 最令我感到方便的就是你可以透過 Vagrant 操作不同的Provider
大大節省你操作的步驟
舉例來說
假設你今天要開 Azure 的 VM,你必須要到Azure的網頁去操作
要開AWS的VM,要到AWS的網頁去操作
用 Vagrant 之後,你可以用本來的 Vagrant command 在公有雲,Local VM,私有雲間自由切換
話不多說,看個範例
用以下這個範例
你只要使用 Vagrant up 加上 provider 參數,就可開啟不同來源的機器
例如我要開啟 Vsphere 的機器,我只要下 vagrant up --provider=vsphere
要開 AWS 的機器,我只要下 vagrant up --provider=aws
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# 我們定義一個 Ubuntu 的機器
# box 的需求是對於 local 的 VM 才需要的
# 所以在 provider 是 vmware_fusion 或 Virtualbox 時,才會用到這個設定
config.vm.box = "hashicorp/precise64"
# vmware_fusion
config.vm.provider "vmware_fusion" do |v, override|
override.vm.box = "precise64_vmware"
v.gui = false
end
# vsphere
config.vm.provider :vsphere do |vsphere|
# 對於私有雲及公有雲,要clone 的vm 是儲存在雲端上的
# 所以 box 使用 dummy box 來達到這個目的
vsphere.vm.box = "nkhasanov/vsphere-simple"
vsphere.host = 'YOURIP'
vsphere.compute_resource_name = 'YOUR DATACENTER'
vsphere.resource_pool_name = 'YOUR RESOURCE POOL'
vsphere.insecure = true
vsphere.template_name = 'VM TEMPLATE'
vsphere.name = "#{YOUR_NAME}-test-machine"
vsphere.user = 'administrator'
vsphere.password = '$p1unK_Lab'
vsphere.vm_base_path = 'vmware_template'
vsphere.linked_clone = true
end
# virtual box
config.vm.provider "virtualbox" do |vb|
vb.gui = false
end
# aws
config.vm.provider :aws do |aws, override|
# aws configurations
aws.access_key_id = "#{YOUR_AWS_ACCESS_KEY_ID}"
aws.secret_access_key = "#{YOUR_AWS_ACCESS_KEY}"
aws.keypair_name = "#{YOUR_NAME}"
aws.security_groups = "#{YOUR_NAME}"
aws.instance_type = "t2.small"
aws.region = "us-east-1"
# ubuntu 14.04 x64
aws.ami = "ami-864d84ee"
# override info
override.ssh.username = "ubuntu"
override.ssh.private_key_path = "#{YOUR_AWS_PRIVATE_KEY_PATH}"
override.vm.synced_folder "#{YOUR_SYNC_FOLDER}", "/vagrant", type: "rsync"
override.vm.box = "dimroc/awsdummy"
end
end